/*
 * terminales-servidor.h
 *
 *  Created on: 08/09/2011
 *      Author: guido
 */

#ifndef TERMINALES_SERVIDOR_H_
#define TERMINALES_SERVIDOR_H_
#include "mensaje-consulta.h"
#include "mensaje-respuesta.h"
#include "serializador.h"
#include "constantes.h"
#include "registro-habitaciones.h"

class Canal;
class MensajeConsulta;

class Serializador;
class Ingreso;
class Consumo;
class Estado;
class Salida;

class TerminalesServer {
	MensajeConsulta* mensajeConsulta;
	MensajeRespuesta* mensajeRespuesta;
	Serializador serializador;
	char* buffer;
	RegistroHabitaciones registros;

public:
	TerminalesServer();
	~TerminalesServer();
	void operator>>(Canal& canal);
	void operator<<(Canal& canal);

	/* Metodos de double dispatch */

	/* Devuelve mensaje de error si la habitacion especificada
	 * estaba ocupada.
	 * Devuelve mensaje ok si se pudo hospedar la habitacion */
	void responderIngreso(Ingreso* ingreso);

	/* Devuelve mensaje de error si la habitacion especificada
	 * no esta ocupada.
	 * Devuelve mensaje ok si se pudo deducir los gastos del saldo */
	void responderConsumo(Consumo* consumo);

	/* Devuelve mensaje de error si la habitacion especificada
	 * no esta ocupada
	 * Devuelve mensaje ok con los datos de estado de la habitacion */
	void responderEstado(Estado* estado);

	/*Devuelve mensaje de error si la habitacion especificada no
	 * esta ocupada.
	 * Devuelve mensaje ok con el saldo si pudo quitar la habitacion */
	void responderSalida(Salida* salida);
};


#endif /* TERMINALES_SERVIDOR_H_ */
